/**
在 TypeScript 中，类和实例之间的关系是面向对象编程的核心概念。
  1. 类的定义
  - 类（Class）是一个蓝图或模板，用于创建对象。它定义了对象的属性和方法。
  - 类可以包含构造函数、实例方法、静态方法和访问修饰符等。

   示例：
  class Car {
      model: string;
      year: number;

      constructor(model: string, year: number) {
          this.model = model;
          this.year = year;
      }

      displayInfo() {
          console.log(`Model: ${this.model}, Year: ${this.year}`);
      }
  }
  2. 实例的创建
  - 实例（Instance）是根据类创建的具体对象。每个实例都有自己的属性值。
  - 使用  `new`  关键字来创建类的实例。

   示例：
  const car1 = new Car("Toyota", 2020);
  const car2 = new Car("Honda", 2021);

  car1.displayInfo(); // 输出: Model: Toyota, Year: 2020
  car2.displayInfo(); // 输出: Model: Honda, Year: 2021
  3. 类与实例的关系
  - 属性：实例具有类中定义的属性，每个实例可以有不同的属性值。
  - 方法：实例可以调用类中定义的方法，方法可以操作实例的属性。
  - 构造函数：当创建实例时，构造函数会被调用，用于初始化实例的属性。

  4. 继承和多态
  - 继承：子类可以继承父类的属性和方法，形成类与实例之间的层次关系。子类的实例可以访问父类的方法和属性。
    
   示例：
  class ElectricCar extends Car {
      batteryCapacity: number;

      constructor(model: string, year: number, batteryCapacity: number) {
          super(model, year); // 调用父类构造函数
          this.batteryCapacity = batteryCapacity;
      }

      displayInfo() {
          super.displayInfo(); // 调用父类方法
          console.log(`Battery Capacity: ${this.batteryCapacity} kWh`);
      }
  }

  const electricCar = new ElectricCar("Tesla", 2022, 100);
  electricCar.displayInfo();
  // 输出:
  // Model: Tesla, Year: 2022
  // Battery Capacity: 100 kWh
  5. 静态成员
  - 静态成员属于类本身，而不是类的实例。可以通过类名直接访问静态属性和方法。

   示例：
  class MathUtils {
      static add(a: number, b: number): number {
          return a + b;
      }
  }

  console.log(MathUtils.add(5, 10)); // 输出: 15
  6. 结论
  在 TypeScript 中，类和实例之间的关系构成了面向对象编程的基础。类作为对象的模板，定义了对象的结构和行为，而实例则是根据类创建的具体对象。通过使用类的继承、方法、属性和静态成员，开发者可以创建灵活且可扩展的应用程序。在实际开发中，合理设计类和实例的关系可以提高代码的可维护性和可读性。
 */
class Person {
  readonly name: string // 只读属性，不能被修改
  age: number

  constructor(name: string, age: number) {
    this.name = name
    this.age = age
  }
}

// 类和实例之间的关系(重要)
const p = new Person('tom', 18)
console.log(p.name, p.age);

// p.name = "kobe" 只读属性不能进行写入操作
p.age = 20

export {}